#ifndef ADRES_H
#define ADRES_H
#include <odb/core.hxx>
#include <odb/database.hxx>
#include <odb/transaction.hxx>
#include "base/Adres_BASE.h"
#include "base/Adres_BASE-odb.hxx"
#include "kontrahent.h"


using namespace std;
using namespace odb::core;

class Adres : public Adres_BASE
{
public:
    Adres();
    /**
      @param id nr z bazy danych danego adresu.
      Pobiera obiekt o danym id, jeśli nie ma takiego obiektu to rzuca błąd.
      */
    Adres(const int id);
    Adres(const QString nazwa, const QString miejscowosc, const QString kod_Pocztowy, const QString ulica);

    Adres(const Adres_BASE &a);

    /**
      Pobierz id adresu.
      */
    unsigned long id();


    QString nazwa();

    /**
      Ustawia nazwę dla danego adresu.
      Jeśli nazwa przeszła walidacje to zwraca true w przeciwnym wypadku flase.
      @example
      Adres a;
      if(! a.nazwa("jakas nazwa spełniająca warunki"))
      {
        cerr<< "Błędna nazwa dla adresu\n";
        return 1;
      }
      @param nazwa dla adresu.
      */
    bool nazwa(const QString nazwa);


    QString miejscowosc();

    /**
      Ustawia miejscowość dla danego adresu.
      Jeśli nazwa miejscowości przeszła walidacje to zwraca true w przeciwnym wypadku flase.
      */
    bool miejscowosc(const QString miejscowosc);


    QString kod_Pocztowy();
    /**
      Ustawia kod pocztowy dla danego adresu.
      Jeśli kod pocztowy przeszedł walidacje to zwraca true w przeciwnym wypadku flase.
      */
    bool kod_Pocztowy(const QString kod_Pocztowy);


    QString ulica();
    /**
      Ustawia ulice dla danego adresu.
      Jeśli nazwa ulicy przeszła walidacje to zwraca true w przeciwnym wypadku flase.
      */
    bool ulica(const QString ulica);

    QSharedPointer<Kontrahent> kontrahent();

    bool kontrahent(const Kontrahent &kontrachent);
};

#endif // ADRES_H
